home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d927.lha / Telnet / src / ring.h < prev    next >
C/C++ Source or Header  |  1993-10-07  |  3KB  |  97 lines

  1. /*
  2.  * Copyright (c) 1988 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted provided
  6.  * that: (1) source distributions retain this entire copyright notice and
  7.  * comment, and (2) distributions including binaries display the following
  8.  * acknowledgement:  ``This product includes software developed by the
  9.  * University of California, Berkeley and its contributors'' in the
  10.  * documentation or other materials provided with the distribution and in
  11.  * all advertising materials mentioning features or use of this software.
  12.  * Neither the name of the University nor the names of its contributors may
  13.  * be used to endorse or promote products derived from this software without
  14.  * specific prior written permission.
  15.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  16.  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  17.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18.  *
  19.  *    @(#)ring.h    5.1 (Berkeley) 9/14/90
  20.  */
  21.  
  22. /*
  23.  * This defines a structure for a ring buffer.
  24.  *
  25.  * The circular buffer has two parts:
  26.  *(((
  27.  *    full:    [consume, supply)
  28.  *    empty:    [supply, consume)
  29.  *]]]
  30.  *
  31.  */
  32. typedef struct {
  33.     char    *consume,    /* where data comes out of */
  34.             *supply,    /* where data comes in to */
  35.         *bottom,    /* lowest address in buffer */
  36.         *top,        /* highest address+1 in buffer */
  37.         *mark;        /* marker (user defined) */
  38.     int        size;        /* size in bytes of buffer */
  39.     u_long    consumetime,    /* help us keep straight full, empty, etc. */
  40.         supplytime;
  41. } Ring;
  42.  
  43. /* Here are some functions and macros to deal with the ring buffer */
  44.  
  45.  
  46. #if    defined(LINT_ARGS)
  47.  
  48. /* Initialization routine */
  49. extern int
  50.     ring_init(Ring *ring, char *buffer, int count);
  51.  
  52. /* Data movement routines */
  53. extern void
  54.     ring_supply_data(Ring *ring, char *buffer, int count);
  55. #ifdef notdef
  56. extern void
  57.     ring_consume_data(Ring *ring, char *buffer, int count);
  58. #endif
  59.  
  60. /* Buffer state transition routines */
  61. extern void
  62.     ring_supplied(Ring *ring, int count),
  63.     ring_consumed(Ring *ring, int count);
  64.  
  65. /* Buffer state query routines */
  66. extern int
  67.     ring_empty_count(Ring *ring),
  68.     ring_empty_consecutive(Ring *ring),
  69.     ring_full_count(Ring *ring),
  70.     ring_full_consecutive(Ring *ring);
  71.  
  72. #else /* LINT_ARGS */
  73. extern int
  74.     ring_init();
  75.  
  76. extern void
  77.     ring_supply_data();
  78. #ifdef notdef
  79. extern void
  80.     ring_consume_data();
  81. #endif
  82.  
  83. extern void
  84.     ring_supplied(),
  85.     ring_consumed();
  86.  
  87. extern void
  88.     ring_clear_mark(),
  89.     ring_mark();
  90.  
  91. extern int
  92.     ring_empty_count(),
  93.     ring_empty_consecutive(),
  94.     ring_full_count(),
  95.     ring_full_consecutive();
  96. #endif    /* defined(LINT_ARGS) */
  97.